Skip to content

JD11 蛇形矩阵 ​

本节目标:理解“JD11 蛇形矩阵”的核心思路,并能把它用于实际开发或面试表达。 简单 通过率:47.15% 时间限制:1秒 空间限制:32M 知识点==数组== 描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11

输入描述: 输入正整数N(N不大于100) 输出描述: 输出一个N行的蛇形矩阵。 示例1 输入: 4 ==复制== 输出: 1 3 6 102 5 94 87

  • 从输出看,基本确定是一个双层循环
  • 由于数量递减,第二个循环的最大值是要减去当前第一个循环的索引的
  • 第二个循环的值即和当前循环的索引有关,又和第一个索引的值有关
  • 要找到这个规律
  • 选取适当的range,为了简化运算,可以从1开始,结束也相应加1
  • 每一行的第一个数字,等于它前一行的数字+行索引:1,2,4,7,11,因此可以用一个变量记录之前的值,然后加上索引,一行的计算完成后,更新这个记录上一行值的变量。
  • 确定第一行第一个数字后,我们发现,每一列第二个数字都是前一个数字加上当前的行号和列号;

直接计算每一行第一个数字,然后基于第一个数字来计算后面的数字,这样可以使逻辑更加直观一些。

基于这个规律,我们可以写出如下的代码: def print_snake_matrix(n):

初始化第一个数字为1 ​

start = 1 for i in range(1, n + 1):

打印每一行的第一个数字 ​

num = start print(num, end='')

计算并打印当前行的其余数字 ​

for j in range(1, n - i + 1): num += i + j print(' {}'.format(num), end='')

换行准备打印下一行 ​

print()

更新下一行的起始数字 ​

start += i

输入 ​

n = int(input())

执行函数 ​

print_snake_matrix(n)

这个方法首先计算每一行的起始数字,然后基于起始数字和行号、列号的关系计算出每一行的其他数字,并逐行打印。通过更新每行的起始数字来为打印下一行做准备。这样做可以让整个过程更加直观,同时也避免了对每个数字进行独立计算。

本站总访问 — 次